package com.bbva.cbm.web.servlet.spring.operatoria;

import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.servlet.ModelAndView;

import cbm.commons.BaseController;
import ejb.cbm.admin.entity.ParametroEntity;
import ejb.com.bbva.cbm.dominio.Caja;
import ejb.com.bbva.cbm.dominio.CentroCostoEntity;
import ejb.com.bbva.cbm.dominio.MontoDenominacion;
import ejb.com.bbva.cbm.dominio.TraspasoCajaEntity;
import ejb.com.bbva.cbm.service.OperativaServiceLocal;
import ejb.com.bbva.cbm.util.Constante;
import ejb.com.bbva.cbm.util.NegocioException;
import ejb.com.bbva.cbm.util.ResultadoOperacion;
import ejb.com.bbva.cbm.util.ResultadoOperacionError;
import ejb.com.bbva.cbm.util.ResultadoOperacionExcepcion;
import ejb.com.bbva.cbm.util.ResultadoOperacionExito;

public class ConfirmacionTraspasoController extends BaseController{
	
	public OperativaServiceLocal operativaServiceLocal;

	@Autowired
	public void setOperativaServiceLocal(OperativaServiceLocal operativaServiceLocal) {
		this.operativaServiceLocal = operativaServiceLocal;
	}

	public ModelAndView open(HttpServletRequest request, HttpServletResponse response){
		String paginaSig = resources.getString("confirmacion_caja");
		
		try {
			String oficinaId  = getOficinaId(request);
			String terminalId = getTerminalId(request);
			String tipo = "Caja";
			long tipoId = Constante.PARA_TIPO_CAJA_ID;
			if("boveda".equals(request.getParameter("tipo"))) {
				tipo = "Boveda";
				tipoId = Constante.PARA_TIPO_BOVEDA_ID;
			}
			request.setAttribute("tipo", tipo);
			request.setAttribute("confirmaciones", operativaServiceLocal.obtenerDatosConfirmacionTraspasoCaja(oficinaId, terminalId, tipoId));
			request.setAttribute("ESTADO_CAJA_APERTURADA_ID", Constante.ESTADO_CAJA_APERTURADA_ID);
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		return new ModelAndView(paginaSig);
	}

	public ModelAndView confirmarTraspaso(HttpServletRequest request, HttpServletResponse response){
		String paginaSig = resources.getString("ajaxrequest");
		StringBuffer xml = new StringBuffer();
		long operacionId = Long.parseLong(request.getParameter("operacionId"));
		try {
			Caja caja = operativaServiceLocal.obtenerCajaOperacionPorId(operacionId);
			List<ParametroEntity> tiposDenominacion = getCache(request).getTiposDenominacion();
			
			if(caja.getMontosDenominacion() != null) {
				for (ParametroEntity tipo : tiposDenominacion) {
					xml.append("<tr><td colspan=2 class='td02TipoDeno'>"+tipo.getDescripcion()+"</td></tr>");
					for (MontoDenominacion monto : caja.getMontosDenominacion()) {
						if(tipo.getCodigoparametro().intValue() == monto.getTipoId()) {
							xml.append("<tr><td class='td0201'>"+monto.getValorTexto()+"</td><td class='td0202'>"+monto.getValorIngresado()+"</td></tr>");
						}
					}
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return new ModelAndView(paginaSig, "responseText", xml.toString());
	}

	public ModelAndView save(HttpServletRequest request, HttpServletResponse response){
		String paginaSiguiente = resources.getString("ajaxrequest");
		ResultadoOperacion resultado = null;
		try {
			long operacionId = Long.parseLong(request.getParameter("operacionId"));
			
			operativaServiceLocal.grabarDatosConfirmacionTraspasoCaja(operacionId, Constante.PARA_ESTADO_TRASPASO_CAJA_CONFIRMACION_ID, getLoginUsuario(request));
			
			resultado = new ResultadoOperacionExito("La confirmación del traspado fue realizada con éxito");
		} catch (NegocioException e) {
			resultado = new ResultadoOperacionError(e.getMessage());
		} catch (Exception e) {
			resultado = new ResultadoOperacionExcepcion(e);
		}
		return new ModelAndView(paginaSiguiente, "responseText", resultado.serializar());
	}
}